Micron Document
<!DOCTYPE html>
<html class="client-nojs vector-feature-language-in-header-enabled vector-feature-language-in-main-page-header-disabled vector-feature-page-tools-pinned-disabled vector-feature-toc-pinned-clientpref-0 vector-toc-not-available vector-feature-main-menu-pinned-disabled vector-feature-limited-width-clientpref-1 vector-feature-limited-width-content-enabled vector-feature-custom-font-size-clientpref-1 vector-feature-appearance-pinned-clientpref-0 skin-theme-clientpref-day vector-sticky-header-enabled" lang="de" dir="ltr"><head>
<meta charset="UTF-8">
<title>Explicitly Parallel Instruction Computing</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="icon" type="image/png" href="./_res_/favicon.png">
<link rel="canonical" href="https://de.wikipedia.org/wiki/Explicitly_Parallel_Instruction_Computing"> <link href="./_mw_/ext.wikimediamessages.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.icons.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.search.codex.styles.css" rel="stylesheet" type="text/css">
<link href="./_mw_/skins.vector.styles.css" rel="stylesheet" type="text/css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link href="./_mw_/ext.gadget.citeRef.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.defaultPlainlinks.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonHide.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonLayout.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiCommonStyle.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiDarkmode.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.dewikiResponsive.css" rel="stylesheet" type="text/css">
<link href="./_mw_/ext.gadget.specialSearch.css" rel="stylesheet" type="text/css">
<link rel="stylesheet" type="text/css" href="./_mw_/site.styles.css">
<link rel="stylesheet" type="text/css" href="./_mw_/noscript.css">
<link rel="stylesheet" type="text/css" href="./_res_/footer.css">
<link rel="stylesheet" type="text/css" href="./_res_/vector-2022.css">
</head>
<body class="skin--responsive skin-vector skin-vector-search-vue mediawiki ltr sitedir-ltr mw-hide-empty-elt ns-0 ns-subject page-Explicitly_Parallel_Instruction_Computing rootpage-Explicitly_Parallel_Instruction_Computing skin-vector-2022 action-view">
<div class="mw-page-container">
<div class="mw-page-container-inner">
<div class="mw-content-container">
<main id="content" class="mw-body">
<header class="mw-body-header vector-page-titlebar">
<h1 id="firstHeading" class="firstHeading mw-first-heading"><span class="mw-page-title-main">Explicitly Parallel Instruction Computing</span></h1>
</header>
<a id="top"></a>
<div id="bodyContent" class="vector-body ve-init-mw-desktopArticleTarget-targetContainer" aria-labelledby="firstHeading" data-mw-ve-target-container="">
<div id="contentSub">
<div id="mw-content-subtitle"></div>
</div>
<div id="mw-content-text" class="mw-body-content mw-content-ltr" lang="de" dir="ltr"><div class="mw-content-ltr mw-parser-output" lang="de" dir="ltr">
<p>Das <b>Explicitly Parallel Instruction Computing</b> (<b>EPIC</b>) bezeichnet ein <a href="Programmierparadigma" title="Programmierparadigma">Programmierparadigma</a> einer <a href="Befehlssatzarchitektur" title="Befehlssatzarchitektur">Befehlssatzarchitektur</a> (<span style="font-style:normal;font-weight:normal"><a href="Englische_Sprache" title="Englische Sprache">englisch</a></span> <span lang="en-Latn" style="font-style:italic"><i>Instruction Set Architecture</i></span>, kurz <i>ISA</i>) und der Verarbeitungsstruktur einer Familie von <a href="Mikroprozessor" title="Mikroprozessor">Mikroprozessoren</a>, z.&nbsp;B. <a href="Itanium" class="mw-redirect" title="Itanium">Itanium</a>. Bei der <a href="Programmierung" title="Programmierung">Programmierung</a> von EPIC-CPUs wird die Parallelisierung der Befehle eines Instruktionsstromes explizit vorgenommen. Die ISA hat Eigenschaften, die die explizite <a href="Parallele_Programmierung" title="Parallele Programmierung">Parallelisierung</a> unterstützen, während eine herkömmliche ISA von einer sequentiellen Abarbeitung der Befehle ausgeht. Ein Programm, das in einer Nicht-EPIC-<a href="Maschinensprache" title="Maschinensprache">Maschinensprache</a> vorliegt, kann auch parallelisiert werden, aber es ist bei der Ausführung eine komplexe <a href="Logikgatter" title="Logikgatter">Logik</a> notwendig, um parallel ausführbare Instruktionen zu identifizieren, da das Befehlsformat keine Aussagen über parallelisierbare Instruktionen macht. Eine EPIC-<a href="Hauptprozessor" class="mw-redirect" title="Hauptprozessor">CPU</a> arbeitet nach dem Prinzip der <a href="In-order_execution" class="mw-redirect" title="In-order execution">in-order Execution</a>, im Gegensatz zur out-of-order execution der <a href="Superskalarit%C3%A4t" title="Superskalarität">superskalaren</a> CPUs.
</p><p>Die Motivation zur Entwicklung eines EPIC-Prozessors ist die Reduktion der <a href="Logikgatter" title="Logikgatter">Logikgatter</a> des Prozessors. Der nun frei gewordene Platz kann dazu benutzt werden, weitere funktionale Einheiten (z.&nbsp;B. Rechenwerke) in die CPU zu integrieren, um
</p>
<ul><li>die Anzahl der parallel ausführbaren Operationen zu erhöhen,</li>
<li>größere <a href="Cache" title="Cache">Caches</a> in den Prozessor zu integrieren,</li>
<li>den Einfluss des Flaschenhalses <i>Hauptspeicher</i> zu verringern oder</li>
<li>den Stromverbrauch, die Verlustleistung und damit die Wärmeabgabe zu reduzieren.</li></ul>
<p>Die <span lang="en">out-of-order execution</span> ist teilweise auch aus dem Zwang zur Rückwärtskompatibilität zu älteren Prozessoren entstanden. Da das Befehlsformat eines älteren Prozessors weiterhin unterstützt werden musste, konnten Verbesserungen zur parallelen Ausführung nur unter der Haube geschehen. Prinzipiell ist es aber möglich, den <a href="Compiler" title="Compiler">Compiler</a> mit dieser Aufgabe zu betrauen, und in den meisten Fällen ist ein Compiler für diese Aufgabe besser geeignet, da er mehr Zeit auf die Optimierung aufwenden kann und Zugriff auf mehr Informationen über den Programmfluss hat.
</p>

<div class="mw-heading mw-heading2"><h2 id="Merkmale">Merkmale</h2></div>
<p>Die wichtigsten Merkmale dieser Befehlssatzarchitektur sind:
</p>
<ul><li>Statische Befehlsgruppierung: Der Compiler legt fest, welche Befehle parallel abgearbeitet werden können. Dadurch wird der Prozessor wesentlich einfacher (Pentium 4 mit 42 Millionen Transistorfunktionen, Itanium mit 25 Millionen Transistorfunktionen).</li>
<li><a href="Very_Long_Instruction_Word" title="Very Long Instruction Word">VLIW</a>-Architektur: Der Prozessor erhält <span lang="en">very long instruction words</span>, welche mehrere Befehle und die Aussage enthalten, auf welcher Einheit des Prozessors der Befehl auszuführen ist. Bei der IA-64 werden drei Befehle in ein VLIW gepackt.</li>
<li><span lang="en">predication</span>: Unter <span lang="en">Predication</span> (Aussage, Behauptung) versteht man die bedingte Ausführung von Befehlen ohne Verwendung von Sprungbefehlen.</li>
<li><span lang="en">speculation</span>: Damit im Befehlsablauf nicht auf Daten gewartet werden muss, können Daten zu einem frühen Zeitpunkt spekulativ geladen und bearbeitet werden.</li>
<li><span lang="en">Load/Store</span>-Architektur: Speicherzugriffe kommen nur bei Load- und Store-Befehlen vor (und natürlich beim <a href="Von-Neumann-Zyklus#FETCH" title="Von-Neumann-Zyklus">Fetch-Zyklus</a>).</li>
<li>Große Registersätze: Die Load/Store-Architektur benötigt viele Register, um die Anzahl der Speicherzugriffe möglichst klein zu halten.</li>
<li><span lang="en">register stack</span> und <span lang="en">register engine</span>: Die Register sind so angeordnet, dass innerhalb einer Prozedur die statischen Register und die von der Prozedur verwendeten Register sichtbar sind. Die Register werden beim Prozeduraufruf dynamisch umbenannt. Die <span lang="en">register engine</span> sichert die im Moment nicht sichtbaren Register bei Bedarf im Speicher, so dass für ein Anwenderprogramm die Anzahl Register unbeschränkt ist.</li>
<li>Leistungsfähiger Befehlssatz: Der Befehlssatz enthält eine große Anzahl leistungsfähiger, für Parallelverarbeitung geeignete Befehle.</li>
<li><span lang="en">little-endian</span> und <span lang="en">big-endian</span>: In einem Steuerregister des Prozessors kann man definieren, wie der Prozessor die Daten im Speicher ablegen soll.</li></ul>
<div class="mw-heading mw-heading2"><h2 id="Realisierung">Realisierung</h2></div>
<p>Beim EPIC wird dem Prozessor bei der <a href="Programmierung" title="Programmierung">Programmierung</a> signalisiert, welche <a href="Instruktion" title="Instruktion">Instruktionen</a> parallel ausführbar sind. Solche parallelisierbaren Instruktionen werden in Gruppen <i>(<span lang="en">instruction groups</span>)</i> zusammengefasst. Die Instruktionen einer Gruppe können dann prinzipiell in beliebiger Reihenfolge und mit beliebigem Parallelitätsgrad ausgeführt werden.
</p><p>Um die abhängigen Instruktionen voneinander zu trennen, müssen <i><span lang="en">stops</span></i> in den Befehlstrom eingebaut werden. <span lang="en">Stops</span> markieren das Ende einer <i><span lang="en">instruction group</span></i> und den Beginn einer Neuen. Die eigentlich <i>explizite</i> Parallelisierungsinformation sind die <i><span lang="en">stops</span>,</i> denn durch sie werden parallelisierbare Instruktionen identifiziert, ohne dass eine Analyse erfolgen muss.
</p><p>Das Optimierungsziel eines gegebenen EPIC-Programmes ist, die Anzahl der nötigen <i><span lang="en">instruction groups</span></i> zu minimieren, also die durchschnittliche Anzahl der Instruktionen pro <i><span lang="en">instruction group</span></i> zu erhöhen.
</p><p>Dabei gibt es Ausnahmen (beim Beispiel IA-64). Zum Beispiel müssen <i><span lang="en">Exceptions</span>,</i> die durch eine frühe Instruktion einer Gruppe ausgelöst werden immer so ausgeführt werden, als ob die späteren Instruktionen einer Gruppe gar nicht ausgeführt worden sind. Beliebige Instruktionen können aber spekulativ bereits ausgeführt worden sein, deren Ergebnis wird beim Auftauchen einer <span lang="en">Exception</span> einer früheren Instruktion verworfen. Der Prozessor muss also den Anschein erwecken, dass die Instruktionen einer Gruppe in Reihenfolge ausgeführt wurden. Andere Ausnahmen betreffen spezielle Instruktionen, die per definition am Anfang oder Ende einer <i><span lang="en">instruction group</span></i> vorkommen müssen.
</p>
<div class="mw-heading mw-heading2"><h2 id="Eigenschaften">Eigenschaften</h2></div>
<p>Durch das EPIC spart man <a href="Ressource" title="Ressource">Ressourcen</a>, die bei Nicht-EPIC-Prozessoren dazu verwendet werden müssen, die Instruktionen während der Ausführung auf die parallel arbeitenden Einheiten des Prozessors aufzuteilen. Diese Einsparungen sind die Motivation für die Erfindung von EPIC. Es können dadurch die Kosten des Chips gesenkt werden, und die Leistungsaufnahme wird verringert. Die Berechnungen, die zur Parallelisierung des Befehlsstromes notwendig sind, werden bei EPIC einmal beim Kompilieren vorgenommen, bei Nicht-EPIC-Prozessoren jedes Mal bei der Ausführung des Codes und mithilfe einer recht großen Anzahl von Logikgattern.
</p><p>Moderne Compiler nehmen auch für Nicht-EPIC-ISAs-Optimierungen des Befehlsstromes vor (verschieben z.&nbsp;B. unabhängige Instruktionen innerhalb des Stromes), um den Prozessor bei der Parallelisierung zu unterstützen. Bei EPIC-ISA ist diese Unterstützung des Prozessors zwingend, das heißt man kann einen Abhängigkeitsfehler erzeugen, selbst wenn die Instruktionen in der richtigen sequentiellen Reihenfolge stehen.
</p><p>EPIC ist mit <a href="Very_Long_Instruction_Word" title="Very Long Instruction Word">VLIW</a> verwandt, denn VLIW dient auch dem Gruppieren von Instruktionen. Dabei muss beachtet werden, dass die VLIW-Gruppierung in <i><span lang="en">Bundles</span></i> und die EPIC-Gruppierung in <i><span lang="en">instruction groups</span></i> bei der <a href="IA-64" class="mw-redirect" title="IA-64">IA-64</a> voneinander unabhängig sind, das heißt zu einer <i><span lang="en">instruction group</span></i> gehören eine beliebige Anzahl von <i><span lang="en">Bundles</span></i> und ein <i><span lang="en">stop</span></i> kann auch zwischen Instruktionen eines einzelnen <i><span lang="en">Bundles</span></i> eingebracht werden.
</p><p>ISAs, die EPIC als Architekturmerkmal haben, sind relativ schwer in <a href="Assemblersprache" title="Assemblersprache">Assemblersprache</a> zu programmieren, und Compiler sind ein beträchtliches Maß komplexer, weil die Parallelisierung nun nicht mehr von der Implementierung der ISA, also dem Prozessor, selbst geleistet wird, sondern explizit erfolgen muss. So gibt es Sachverhalte bei der EPIC-Programmierung, die sich mit Nicht-EPIC-Maschinensprache gar nicht ausdrücken lassen, weil dort das Modell eine strikt sequentielle Ausführung ist.
</p><p>Da die Berechnungen, die für die Parallelisierung notwendig sind, unabhängig von der Ausführung erfolgen, kann mehr Rechenzeit auf ebendiese Aufgabe verwendet werden.
</p>
<div class="mw-heading mw-heading2"><h2 id="Statische_Befehlsgruppierung">Statische Befehlsgruppierung</h2></div>
<p>Statische Befehlsgruppierung bedeutet, dass der Compiler für die Gruppierung parallel ablaufender Befehle zuständig ist. Wichtig ist dabei, dass der Compiler für die Architektur des Prozessors optimiert sein muss, um die Eigenschaften des Prozessors auszunutzen.
Der Compiler gruppiert die Befehle so, dass möglichst viele parallel abgearbeitet werden können. Zusätzlich legt er fest, was für eine Einheit im Prozessor für die Bearbeitung des Befehls benötigt wird und markiert die Befehle entsprechend. Die Befehle werden dem Prozessor in Gruppen übergeben und aufgrund der vom Compiler festgelegten Zuordnung auf Prozessor-Einheiten verteilt und bearbeitet.
</p>
<div class="mw-heading mw-heading2"><h2 id="Predication">Predication</h2></div>
<p><span lang="en">Predication</span> ist ein Verfahren, Befehle abhängig von einer Bedingung auszuführen, ohne Sprungbefehle einzusetzen. Das Verfahren wird im Folgenden vereinfacht dargestellt: Die Ausführung eines Befehls kann vom Inhalt eines Predicate-Registers abhängen. Im folgenden Beispiel wird der MOV-Befehl nur ausgeführt, wenn das Predicate-Register <code>p1</code> true ist; ansonsten wirkt er wie ein NOP.
</p>
<pre>p1 mov gr8 = gr5 &nbsp;; lade gr8 mit dem Wert von gr5 falls p1 = true
&nbsp;; falls p1 = false, wirkt der Befehl wie ein
&nbsp;; NOP
</pre>
<p>Die Predicate-Register können mit Compare-Befehlen gesetzt werden. Der folgende Compare-Befehl testet die Register <code>gr10</code> und <code>gr11</code> auf Gleichheit. Das Predicate-Register <code>p1</code> wird mit Resultat, das Register <code>p2</code> mit dessen Negation geladen.
</p>
<pre> cmp.eq p1,p2 = gr10,gr11 &nbsp;; teste gr10 mit gr11 auf equal
&nbsp;; falls equal: p1 true, p2 false
&nbsp;; falls not equal: p1 false, p2 true
</pre>
<div class="mw-heading mw-heading2"><h2 id="Speculation">Speculation</h2></div>
<p>Je schneller die Prozessoren werden, desto größer ist der Verlust, wenn Daten vom Speicher geladen werden müssen und der Prozessor auf diese Daten warten muss. Darum ist das Ziel, Befehle im Programmablauf früher auszuführen, damit die benötigten Daten vorhanden sind, wenn sie benötigt werden.
</p><p>Im ersten Beispiel muss nach dem Ladebefehl gewartet werden, bis die Daten in <code>gr4</code> resp. in <code>gr5</code> geladen sind. Im zweiten Beispiel wurde die Befehlsreihenfolge vertauscht und damit der Abstand zwischen voneinander abhängigen Befehlen vergrößert.
</p>
<pre>ld gr4, x
add gr4 = gr4,gr8
st y, gr4
ld gr5, a
add gr5 = gr5,gr9
st b, gr5
</pre>
<pre>ld gr4, x
ld gr5, a
add gr4 = gr4,gr8
add gr5 = gr5,gr9
st y, gr4
st b, gr5
</pre>
<p>In vielen Fällen genügt es aber nicht, einen Befehl um einen oder zwei Befehle vorzuverlegen, da der Unterschied zwischen der Dynamik des Prozessors und dem Speicher zu groß ist. Die Verarbeitung der Daten muss warten, bis die Daten geladen wurden. Das Laden der Daten soll darum so weit vorverlegt werden, dass kein Warten notwendig ist.
</p><p>Wird ein Ladebefehl wie im untenstehenden Beispiel über eine Verzweigung vorverlegt, so spricht man von einer <b><span lang="en">Control Speculation</span>.</b> Tritt beim Laden ein Fehler auf, so soll dieser nicht behandelt werden, da man ja noch nicht weiß, ob man die Daten überhaupt benötigt. Das Laden erfolgt spekulativ. Bevor die Daten verarbeitet werden, muss aber geprüft werden, ob beim Laden ein Fehler aufgetreten ist und behoben werden muss. Die zweite Art der Spekulation ist die <b><span lang="en">Data Speculation</span>.</b> Die große Anzahl von Arbeitsregistern erlaubt es viele Datenelemente in Registern zu halten. Um zu verhindern, dass beim Laden auf Daten gewartet werden muss, werden die benötigten Daten frühzeitig in Register geladen. Die folgende Befehlsfolge zeigt ein Beispiel für einen normalen Load. Der Befehl <code>add gr5=gr2,gr7</code> kann erst durchgeführt werden, wenn die Daten aus dem Speicher in <code>gr2</code> geladen wurden.
</p>
<pre>add gr3 = 4,gr0
st [gr32] = gr3
ld gr2 = [gr33]
add gr5 = gr2,gr7
</pre>
<p>Der Prozessor merkt sich darum alle vorzeitig geladenen Adressen im <b><span lang="en">Advanced Load Address Table</span></b> (ALAT). Im folgenden Beispiel beinhaltet der Load-Befehl eine <span lang="en">Control Speculation</span> da eine Verzweigung zwischen Laden und Verarbeitung liegt und eine Data Speculation, da der Store-Befehl mit dem <span lang="en">Pointer</span> <code>[gr32]</code> den geladenen Wert betreffen könnte. Es handelt sich um einen <span lang="en">Speculative Advanced Load</span>. Falls beim <code>ld.sa</code> ein Fehler auftritt, wird kein ALAT-Eintrag erstellt. Falls der Ladevorgang fehlerfrei abläuft, wird ein Eintrag im ALAT gemacht. Falls der Wert an der Adresse <code>[gr33]</code> verändert wird, so wird der ALAT-Eintrag gelöscht.
</p>
<pre> ld.sa gr2 = [gr33] &nbsp;; speculative advanced load
...
add gr5 = gr2,gr7 &nbsp;; use data
...
...
add gr3 = 4,gr0
st [gr32] = gr3
...
cmp.eq p3,p4 = gr7,gr8
p3 chk.a gr2,recover &nbsp;; prüft ALAT
back: p3 add gr9 = 1, gr6
...
...
recover: ld gr2 = [gr33]
add gr5 = gr2,gr7
br back
</pre>
<p>Der Wert wird nicht nur vorzeitig gelesen <code>ld.a gr2 = [gr33]</code>, sondern auch bearbeitet <code>add gr5 = gr2,gr7</code>. Falls das verwendete Datenelement durch eine Operation verändert wird (z.&nbsp;B. durch <code>st [gr32] = gr3</code>), so wird dies durch den Check-Befehl festgestellt (<code>chk.a gr2,recover</code>), da der Eintrag im ALAT fehlt.
</p>
<style data-mw-deduplicate="TemplateStyles:r261921266">
/* start https://de.wikipedia.org/ */


.mw-parser-output table.erw-nav-zebra>tbody>:nth-child(odd){background-color:var(--dewiki-hintergrundfarbe-basis)}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste{background-color:#f5f5f5}.mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe{background-color:#e5ecf2}.mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,.mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#ececec}.mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt>.wikitable>*>tr{border-top:2px solid #fdfdfd!important;border-bottom:2px solid #fdfdfd!important}@media screen{html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-night .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-night .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-night .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-blau .erw-nav-gruppe,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-leiste,html.skin-theme-clientpref-os .mw-parser-output .erw-nav-farbschema-grau .erw-nav-gruppe{background-color:#202122}html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable tr,html.skin-theme-clientpref-os .mw-parser-output .erweiterte-navigationsleiste .klappleiste-inhalt .wikitable td{border-color:#101418!important}html.skin-theme-clientpref-os .mw-parser-output .erw-nav-bild span[typeof="mw:File"] img{background-color:#c8ccd1}}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable{border-top:0px!important;border-bottom:0px!important;margin-top:0!important;margin-bottom:0!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:first-of-type td{border-top:0px!important}.mw-parser-output .erweiterte-navigationsleiste .hlist .wikitable tr:last-of-type td{border-bottom:0px!important}


/* end https://de.wikipedia.org/ */
</style><style data-mw-deduplicate="TemplateStyles:r260755238">
/* start https://de.wikipedia.org/ */


.mw-parser-output div.klappleiste{border:1px solid var(--dewiki-rahmenfarbe1);clear:both;font-size:95%;box-sizing:border-box;margin-top:1.5em;padding:2px}.mw-parser-output div.klappleiste:after{clear:both;content:"";display:block}.mw-parser-output div.klappleiste-bild{float:left;padding:2px}.mw-parser-output div.klappleiste-kopf{background:var(--dewiki-hintergrundfarbe5);color:var(--color-base,#202122);text-align:center;font-weight:bold}.mw-parser-output div.klappleiste.mw-collapsed .klappleiste-bild{display:none}.mw-parser-output div.klappleiste+div.klappleiste,.mw-parser-output div.klappleiste+link+div.klappleiste,.mw-parser-output div.klappleiste+link+link+div.klappleiste,.mw-parser-output div.klappleiste+link+style+div.klappleiste,.mw-parser-output div.klappleiste+style+div.klappleiste,.mw-parser-output div.klappleiste+style+style+div.klappleiste,.mw-parser-output div.klappleiste+style+link+div.klappleiste{margin-top:-1px}@media screen{html.skin-theme-clientpref-night .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}@media screen and (prefers-color-scheme:dark){html.skin-theme-clientpref-os .mw-parser-output .klappleiste-bild span[typeof="mw:File"]:not(.skin-invert-image) img{background-color:#c8ccd1}}


/* end https://de.wikipedia.org/ */
</style>
<div class="klappleiste mw-collapsible navileiste erweiterte-navigationsleiste navigation-not-searchable center erw-nav-farbschema-blau" role="navigation">
<div class="klappleiste-kopf"><a href="Prozessorarchitektur" title="Prozessorarchitektur">Prozessorarchitekturen</a></div>
<div class="klappleiste-inhalt mw-collapsible-content" style="clear:left">
<table class="wikitable erw-nav-zebra" style="width:100%;margin:0;text-align:left;font-size:95%;margin-top:.1em;margin-bottom:.0em;">

<tbody><tr>
<td class="erw-nav-bild" style="width:0; padding:0 2px 0 0; border:1px solid transparent;" rowspan="3"><div class="noviewer" aria-hidden="true" role="presentation"><span typeof="mw:File"></span></div>
</td>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>nach <a href="Datenwort" title="Datenwort">Wortbreite</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="1-Bit-Architektur" title="1-Bit-Architektur">1-Bit-Architektur</a>&nbsp;•
<a href="Bit-Slice" title="Bit-Slice">Bit-Slice-Architektur</a>&nbsp;•
<a href="4-Bit-Architektur" title="4-Bit-Architektur">4-Bit-Architektur</a>&nbsp;•
<a href="8-Bit-Architektur" title="8-Bit-Architektur">8-Bit-Architektur</a>&nbsp;•
<a href="16-Bit-Architektur" title="16-Bit-Architektur">16-Bit-Architektur</a>&nbsp;•
<a href="32-Bit-Architektur" title="32-Bit-Architektur">32-Bit-Architektur</a>&nbsp;•
<a href="64-Bit-Architektur" title="64-Bit-Architektur">64-Bit-Architektur</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 2px solid #FFF;padding: 0 1em;"><b>nach <a href="Befehlssatzarchitektur" title="Befehlssatzarchitektur">Befehlssatzaufbau</a></b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Complex_Instruction_Set_Computer" title="Complex Instruction Set Computer">CISC</a>&nbsp;•
<a class="mw-selflink selflink">EPIC</a>&nbsp;•
<a href="NISC" class="mw-redirect" title="NISC">NISC</a>&nbsp;•
<a href="Reduced_Instruction_Set_Computer" title="Reduced Instruction Set Computer">RISC</a>&nbsp;•
<a href="Very_Long_Instruction_Word" title="Very Long Instruction Word">VLIW</a>&nbsp;•
<a href="Mikroarchitektur" title="Mikroarchitektur">Mikroarchitektur</a>
</p>
</td></tr>
<tr>
<td class="erw-nav-gruppe" style="white-space: nowrap;text-align: right;border: 1px solid transparent;border-top: 1px solid #FFF;border-bottom: 1px solid #FFF;padding: 0 1em;"><b>mit Optimierung für Einsatzzweck</b>
</td>
<td class="hlist" style="text-align: left;border-left: 2px solid #fdfdfd;width: 100%;margin: .4em 0;border-color: #fdfdfd;padding: 0 .25em;">
<p><a href="Prozessor" title="Prozessor">(Haupt-)Prozessor</a>&nbsp;•
<a href="Grafikprozessor" title="Grafikprozessor">Grafikprozessor</a>&nbsp;•
<a href="General_Purpose_Computation_on_Graphics_Processing_Unit" title="General Purpose Computation on Graphics Processing Unit">GPGPU</a>&nbsp;•
<a href="Streamprozessor" title="Streamprozessor">Streamprozessor</a>&nbsp;•
<a href="Soundprozessor" title="Soundprozessor">Soundprozessor</a>&nbsp;•
<a href="Gleitkommaeinheit" title="Gleitkommaeinheit">Gleitkommaeinheit</a>&nbsp;•
<a href="Netzwerkprozessor" title="Netzwerkprozessor">Netzwerkprozessor</a>&nbsp;•
<a href="Physikbeschleuniger" title="Physikbeschleuniger">Physikbeschleuniger</a>&nbsp;•
<a href="Vektorprozessor" title="Vektorprozessor">Vektorprozessor</a>&nbsp;•
<a href="TensorFlow_Processing_Unit" class="mw-redirect" title="TensorFlow Processing Unit">TensorFlow Processing Unit</a>
</p>
</td></tr>

























































</tbody></table></div></div></div><!--htdig_noindex--><div><div class="zim-footer">
Dieser Artikel wurde von <a class="external text" title="Zuletzt bearbeitet am 2019-06-13" href="https://de.wikipedia.org/wiki/?title=Explicitly_Parallel_Instruction_Computing&amp;oldid=189520512">Wikipedia</a> herausgegeben. Der Text ist unter <a class="external text" href="https://creativecommons.org/licenses/by-sa/4.0/deed.de">Creative Commons Attribution-Share Alike 4.0</a> verfügbar, sofern nicht anders angegeben. Für die Mediendateien können zusätzliche Bedingungen gelten.
</div>
</div><!--/htdig_noindex--></div>
</div>
</main>
</div>
</div>
</div>
<script src="./_webp_/webpHandler.js"></script>

</body></html>